package main

import (
	"fmt"
	"runtime"
	"time"
)

func r() {
	for i := 0; i < 20; i++ {
		fmt.Println("routine run :", i)
	}
}

func main16() {
	// 方式一 非匿名函数
	/*
		go r()
		for i := 0; i < 20; i++ {
			fmt.Println("main run :", i)
		}*/
	// 方式二 匿名无参数
	/*go func() {
		defer fmt.Println("A.defer")
		// 立即执行的匿名函数
		func() {
			defer fmt.Println("B.defer")
			// 退出一整个 routine的方法 而非内部这个匿名函数
			runtime.Goexit()
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()*/
	// 方式三 匿名含参数函数
	go func(a, b int) {
		fmt.Println(a, b)
		defer fmt.Println("A.defer")
		// 立即执行的匿名函数
		func() {
			defer fmt.Println("B.defer")
			// 退出routine的方法
			runtime.Goexit()
			fmt.Println("B")
		}()
		fmt.Println("A")
	}(10, 20)

	for i := 0; i < 2; i++ {
		time.Sleep(1 * time.Second)
	}
}
